using System;
using System.Collections.Generic;
using System.Text;
using csharp.rad.general;

namespace csharp.rad.sisponto
{
	public class Configuracao
	{
		#region private declarations
		private static Database bd;
		private static Database.Result result = new Database.Result();
		private static string 	c_msg_erro;
		private static Int32 	c_id_Configuracao;
		private static Int32 	c_tempo_tolerancia;
		private static Int32 	c_tempo_mostrar_foto;
		private static string 	c_msg_atrasado;
		private static string 	c_msg_fora_horario;
		private static string 	c_msg_afastado;
		private static string 	c_msg_func_nao_cadastrado;
		private static string 	c_caminho_pg_dump;
		private static string 	c_caminho_pg_restore;
		private static bool 	c_e_escola;
		private static string 	c_msg_entrada;
		private static string 	c_msg_almoco;
		private static string 	c_msg_retorno;
		private static string 	c_msg_saida;
		private static Int32 	c_tempo_considerar_atrasado;
		private static bool 	c_fechar_dia_automaticamente;
		private static TimeSpan c_inicio_dia;
		private static TimeSpan c_fim_dia;
		private static Int32 	c_intervalo_entre_pontos;
		private static bool 	c_barrar_func_horario_trabalho;
		private static bool 	c_barrar_func_entrada;
		private static bool 	c_barrar_func_almoco;
		private static bool 	c_barrar_func_retorno;
		private static bool 	c_barrar_func_saida;
		private static bool 	c_versao_teste;
		private static int  	c_escala_primeiro_dia_semana;
		private static int  	c_escala_num_dias_retrocede;
		private static DateTime c_data_ultimo_fechamento;
		#endregion
		
		#region properties
		public static string msg_erro
		{
			set { c_msg_erro = value; }
			get { return c_msg_erro; }
		}
		
		public static Int32 id_Configuracao
		{
			set { c_id_Configuracao = value; }
			get { return c_id_Configuracao; }
		}
		
		public static Int32 tempo_tolerancia
		{
			set { c_tempo_tolerancia = value; }
			get { return c_tempo_tolerancia; }
		}
		
		public static Int32 tempo_mostrar_foto
		{
			set { c_tempo_mostrar_foto = value; }
			get { return c_tempo_mostrar_foto; }
		}
		
		public static string msg_atrasado
		{
			set { c_msg_atrasado = value; }
			get { return c_msg_atrasado; }
		}
		
		public static string msg_fora_horario
		{
			set { c_msg_fora_horario = value; }
			get { return c_msg_fora_horario; }
		}
		
		public static string msg_afastado
		{
			set { c_msg_afastado = value; }
			get { return c_msg_afastado; }
		}
		
		public static string msg_func_nao_cadastrado
		{
			set { c_msg_func_nao_cadastrado = value; }
			get { return c_msg_func_nao_cadastrado; }
		}
		
		public static string caminho_pg_dump
		{
			set { c_caminho_pg_dump = value; }
			get { return c_caminho_pg_dump; }
		}
		
		public static string caminho_pg_restore
		{
			set { c_caminho_pg_restore = value; }
			get { return c_caminho_pg_restore; }
		}
		
		public static bool e_escola
		{
			get { return c_e_escola; }
			set { c_e_escola = value; }
		}
		
		public static string msg_entrada
		{
			get { return c_msg_entrada; }
			set { c_msg_entrada = value; }
		}
		
		public static TimeSpan fim_dia
		{
			get { return c_fim_dia; }
			set { c_fim_dia = value; }
		}
		
		public static TimeSpan inicio_dia
		{
			get { return c_inicio_dia; }
			set { c_inicio_dia = value; }
		}
		
		public static bool fechar_dia_automaticamente
		{
			get { return c_fechar_dia_automaticamente; }
			set { c_fechar_dia_automaticamente = value; }
		}
		
		public static Int32 tempo_considerar_atrasado
		{
			get { return c_tempo_considerar_atrasado; }
			set { c_tempo_considerar_atrasado = value; }
		}
		
		public static string msg_saida
		{
			get { return c_msg_saida; }
			set { c_msg_saida = value; }
		}
		
		public static string msg_retorno
		{
			get { return c_msg_retorno; }
			set { c_msg_retorno = value; }
		}
		
		public static bool barrar_func_horario_trabalho
		{
			get { return c_barrar_func_horario_trabalho; }
			set { c_barrar_func_horario_trabalho = value; }
		}
		
		public static string msg_almoco
		{
			get { return c_msg_almoco; }
			set { c_msg_almoco = value; }
		}
		
		public static int intervalo_entre_pontos
		{
			get { return c_intervalo_entre_pontos; }
			set { c_intervalo_entre_pontos = value; }
		}

		public static bool barrar_func_entrada
		{
			get{ return c_barrar_func_entrada; }
			set{ c_barrar_func_entrada= value; }
		}

		public static bool barrar_func_retorno
		{
			get{ return c_barrar_func_retorno; }
			set{ c_barrar_func_retorno= value; }
		}

		public static bool barrar_func_almoco
		{
			get{ return c_barrar_func_almoco; }
			set{ c_barrar_func_almoco= value; }
		}

		public static bool barrar_func_saida
		{
			get{ return c_barrar_func_saida; }
			set{ c_barrar_func_saida= value; }
		}
		
		public static bool versao_teste
		{
			get{ return c_versao_teste; }
			set{ c_versao_teste = value; }
		}
		
		public static int escala_primeiro_dia_semana
		{
			get { return c_escala_primeiro_dia_semana;}
			set { c_escala_primeiro_dia_semana = value;}
		}
		
		public static int escala_num_dias_retrocede
		{
			get { return c_escala_num_dias_retrocede;}
			set { c_escala_num_dias_retrocede = value; }
		}
		
		public static DateTime dataUltimoFechamento 
		{
			get { return c_data_ultimo_fechamento; }
			set { c_data_ultimo_fechamento = value; }
		}
				
		public static TimeSpan getTempoTolerancia()
		{
			return new TimeSpan(0,tempo_tolerancia,0);
		}
		#endregion
		
		public static void setDatabase(Database bancoDeDados)
		{
			bd = bancoDeDados;
		}
		
		public static int obter()
		{
			string _sql;
			DateTime aux = new DateTime();
			System.Data.DataSet dtsConfiguracao = new System.Data.DataSet();

			_sql = "SELECT * FROM Configuracao";

			dtsConfiguracao 				= bd.ExecuteQuery(_sql, "Configuracao", out result);

			if (result.Status == Database.Status.Failed)
			{
				c_msg_erro = result.ErrorMessage;
				return -1;
			}
			if (dtsConfiguracao.Tables["Configuracao"].Rows.Count == 0)
				return 0;

			System.Data.DataRow registro 	= dtsConfiguracao.Tables["Configuracao"].Rows[0];
			c_id_Configuracao 				= Convert.ToInt32(registro["id_Configuracao"]);
			c_tempo_tolerancia 				= Convert.ToInt32(registro["tempo_tolerancia"]);
			c_tempo_mostrar_foto 			= Convert.ToInt32(registro["tempo_mostrar_foto"]);
			c_msg_atrasado 					= Convert.ToString(registro["msg_atrasado"]);
			c_msg_fora_horario 				= Convert.ToString(registro["msg_fora_horario"]);
			c_msg_afastado 					= Convert.ToString(registro["msg_afastado"]);
			c_msg_func_nao_cadastrado 		= Convert.ToString(registro["msg_func_nao_cadastrado"]);
			c_caminho_pg_dump 				= Convert.ToString(registro["caminho_pg_dump"]);
			c_caminho_pg_restore 			= Convert.ToString(registro["caminho_pg_restore"]);
			c_e_escola 						= Convert.ToBoolean(registro["e_escola"]);
			c_msg_entrada 					= Convert.ToString(registro["msg_entrada"]);
			c_msg_almoco 					= Convert.ToString(registro["msg_almoco"]);
			c_msg_retorno 					= Convert.ToString(registro["msg_retorno"]);
			c_msg_saida 					= Convert.ToString(registro["msg_saida"]);
			c_tempo_considerar_atrasado 	= Convert.ToInt32(registro["tempo_considerar_atrasado"]);
			c_fechar_dia_automaticamente 	= Convert.ToBoolean(registro["fechar_dia_automaticamente"]);

			aux = Convert.ToDateTime(registro["inicio_dia"]);
			c_inicio_dia = new TimeSpan(aux.Hour, aux.Minute, aux.Second);

			aux = Convert.ToDateTime(registro["fim_dia"]);
			c_fim_dia = new TimeSpan(aux.Hour, aux.Minute, aux.Second);
			c_barrar_func_horario_trabalho 	= Convert.ToBoolean(registro["barrar_func_horario_trabalho"]);
			c_barrar_func_entrada 			= Convert.ToBoolean(registro["barrar_func_entrada"]);
			c_barrar_func_almoco			= Convert.ToBoolean(registro["barrar_func_almoco"]);
			c_barrar_func_retorno			= Convert.ToBoolean(registro["barrar_func_retorno"]);
			c_barrar_func_saida 			= Convert.ToBoolean(registro["barrar_func_saida"]);
			c_intervalo_entre_pontos 		= Convert.ToInt32(registro["intervalo_entre_pontos"]);
			c_escala_primeiro_dia_semana 	= Convert.ToInt32(registro["escala_primeiro_dia_semana"]);
			c_escala_num_dias_retrocede  	= Convert.ToInt32(registro["escala_num_dias_retrocede"]);
			c_data_ultimo_fechamento	 	= Convert.ToDateTime(registro["ultimo_fechamento"]);
			if (c_escala_primeiro_dia_semana.Equals(string.Empty))
				c_escala_primeiro_dia_semana = (int)DayOfWeek.Monday;
			
			string chave = Convert.ToString(registro["msg_erro"]);
			if( chave.Equals(CONSTANTS.CHAVE))
				versao_teste = false;
			else
				versao_teste = true;
			return 1;
		}

		public static int gravar()
		{
			string _sql;

			_sql = "UPDATE Configuracao "
				+ "SET  msg_atrasado='" + c_msg_atrasado
				+ "', msg_fora_horario='" + c_msg_fora_horario
				+ "', msg_afastado='" + c_msg_afastado
				+ "', msg_func_nao_cadastrado='" + c_msg_func_nao_cadastrado
				+ "', caminho_pg_dump='" + c_caminho_pg_dump
				+ "', caminho_pg_restore='" + c_caminho_pg_restore
				+ "', tempo_tolerancia=" + c_tempo_tolerancia
				+ ", tempo_mostrar_foto=" + c_tempo_mostrar_foto
				+ ", e_escola=" + c_e_escola
				+ ", msg_entrada='" + c_msg_entrada
				+ "', msg_almoco='" + c_msg_almoco
				+ "', msg_retorno='" + c_msg_retorno
				+ "', msg_saida='" + c_msg_saida
				+ "', tempo_considerar_atrasado=" + c_tempo_considerar_atrasado
				+ ", fechar_dia_automaticamente=" + c_fechar_dia_automaticamente
				+ ", inicio_dia='" + c_inicio_dia
				+ "', fim_dia='" + c_fim_dia + "' "
				+ ", barrar_func_horario_trabalho = " + c_barrar_func_horario_trabalho
				+ ", intervalo_entre_pontos = " + c_intervalo_entre_pontos
				+ ", barrar_func_entrada = "+c_barrar_func_entrada
				+ ", barrar_func_almoco= "+c_barrar_func_almoco
				+ ", barrar_func_retorno= "+c_barrar_func_retorno
				+ ", barrar_func_saida= "+c_barrar_func_saida
				+ ", escala_primeiro_dia_semana= "+c_escala_primeiro_dia_semana
				+ ", escala_num_dias_retrocede= "+c_escala_num_dias_retrocede;
			
			result = bd.ExecuteCommand(_sql, Database.doNotUseTransaction);

			if (result.Status == Database.Status.Failed)
			{
				c_msg_erro = result.ErrorMessage;
				return 0;
			}

			return 1;
		}
	}
}
